package cn.iocoder.yudao.module.system.convert.tenantdetail;

import java.util.*;

import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
import cn.iocoder.yudao.module.system.controller.app.tenantdetail.vo.AppTenantDetailCheckRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.userdetail.UserDetailDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import cn.iocoder.yudao.module.system.controller.admin.tenantdetail.vo.*;
import cn.iocoder.yudao.module.system.dal.dataobject.tenantdetail.TenantDetailDO;

/**
 * 店铺详情 Convert
 *
 * @author 曹建伟
 */
@Mapper
public interface TenantDetailConvert {

    TenantDetailConvert INSTANCE = Mappers.getMapper(TenantDetailConvert.class);

    TenantDetailDO convert(TenantDetailCreateReqVO bean);

    TenantDetailDO convert(TenantDetailUpdateReqVO bean);

    default TenantDetailRespVO convert(TenantDetailDO bean){
        if ( bean == null ) {
            return null;
        }

        TenantDetailRespVO tenantDetailRespVO = new TenantDetailRespVO();

        tenantDetailRespVO.setMobile( bean.getMobile() );
        tenantDetailRespVO.setUserId( bean.getUserId() );
        tenantDetailRespVO.setName( bean.getName() );
        tenantDetailRespVO.setDescription( bean.getDescription() );
        tenantDetailRespVO.setTitleUrl( bean.getTitleUrl() );
        tenantDetailRespVO.setPicUrl( bean.getPicUrl() );
        tenantDetailRespVO.setAddress( bean.getAddress() );
        tenantDetailRespVO.setAreaId( bean.getAreaId() );
        tenantDetailRespVO.setId( bean.getId() );
        tenantDetailRespVO.setCreateTime( bean.getCreateTime() );
        tenantDetailRespVO.setAreaName(AreaUtils.format(bean.getAreaId().intValue()));

        return tenantDetailRespVO;
    }

    List<TenantDetailRespVO> convertList(List<TenantDetailDO> list);

    PageResult<TenantDetailRespVO> convertPage(PageResult<TenantDetailDO> page);

    default PageResult<TenantDetailRespVO> convertPage02(PageResult<TenantDetailDO> page, Map<String, UserDetailDO> userDetailDOMap){
        PageResult<TenantDetailRespVO> pageResult = convertPage(page);
        for(int i = 0; i<pageResult.getList().size(); i++){
            TenantDetailRespVO respVO = pageResult.getList().get(i);
            respVO.setUserDetail(userDetailDOMap.get(respVO.getMobile()));
            respVO.setAreaName(AreaUtils.format(respVO.getAreaId().intValue()));
        }

        return pageResult;
    }

    List<TenantDetailExcelVO> convertList02(List<TenantDetailDO> list);

    default AppTenantDetailCheckRespVO convertAppCheck(List<TenantDetailDO> list){
        AppTenantDetailCheckRespVO respVO = new AppTenantDetailCheckRespVO();

        if(CollUtil.isEmpty(list)){
            respVO.setMobileList(new ArrayList<>());
            return respVO;
        }

        List<String> mobileList = new ArrayList<>();
        for(int i = 0; i<list.size(); i++){
            mobileList.add(list.get(i).getMobile());
        }

        respVO.setMobileList(mobileList);

        return respVO;
    }

}
